//#include "Tcp_Connection.hpp"
//#include "Message.hpp"
//#include "DataRepo.hpp"
//
//
//enum Connectiontype{
//	Client = 0 ,
//	Sensor,
//	Unknown
//
//};
//
//class Connection_End_Sensor_UDP : public Tcp_Connection
//{
//
//		Connectiontype	m_Entity;
//		int				m_CnnectionID;
//		DataRepo&		m_dataRepo;
//
//
//public:
//	typedef boost::shared_ptr<Connection_End_Sensor_UDP> ConnectionEnd_Sensor_Pointer;
//
//	Connection_End_Sensor_UDP(boost::asio::io_service& io_service , int connectionID, DataRepo& repo ): Tcp_Connection( io_service ),m_dataRepo( repo )
//	{
//
//		m_CnnectionID = connectionID;
//		std::cout<<"Instantiating a new instance of Connection_end with ID"<< m_CnnectionID <<std::endl;
//		m_Entity = Unknown;
//	}
//
//Connectiontype	GetConnectioType( std::string data ){
//
//	if( data == "Client" ){
//		return Client;
//	}
//	else if( data == "Sensor" )	{
//		return Sensor;
//	}
//	return Unknown;
//}
//
//
//void HandleReq( Message ReceievedMessage )
//{
//	/*
//	 * 	BIND = 0,
//	PULL,
//	PUSH,
//	SUBMIT,
//	ENTITY
//	 * */
//
//	switch( ReceievedMessage.m_action )
//	{
//	case ENTITY:
//		m_Entity = GetConnectioType( ReceievedMessage.data );
//		break;
//	case SUBMIT:
//		std::cout<<"saving data"<<  ReceievedMessage.data <<"in repo\n";
//		m_dataRepo.SaveData( ReceievedMessage.m_DataType, time( NULL ), ReceievedMessage.data );
//		break;
//	case PUSH:
//		std::cout<<"Error, Receiving PUSH from Sensor\n";
//		break;
//	case PULL:
//		std::cout<<"Error, Receiving PULL from Sensor\n";
//		break;
//	case BIND:
//		std::cout<<"Error, receiving Bind from Sensor \n";
//		break;
//	default:
//		std::cout<<"Undefined Message, dumping buffer";
//
//	}
//}
//
//
//void Recv_Handler(  const boost::system::error_code& error, // Result of operation.
//						std::size_t bytes_transferred           // Number of bytes received.
//					)
//	{
//		std::cout<<"In receive handler\n";
//
//		if( !error )
//			{
//				std::cout<<"ConnecionEnd::Recv_Handler \n";
//				std::cout<<"Received: "<<bytes_transferred<<"Bytes !"<<std::endl;
//				Message ReceievedMessage;
//				std::string MsgBuf = buf;
//				std::cout<<"ConnectionEnd::RecvHandler:MsgBuf.length()= "<<MsgBuf.length()<<std::endl;
//
//
//				if( ReceievedMessage.Decode( MsgBuf ) )
//				{
//						std::cout<<"Message is"<<MsgBuf<<" Length is: "<<MsgBuf.length()<<std::endl;
//
//						switch( ReceievedMessage.m_MsgType )
//						{
//							case REQ:
//								HandleReq( ReceievedMessage );
//								break;
//							case RES:
//								//Server Shouldnt be sebding
//								break;
//							case ACK:
//								break;
//							default:
//								break;
//						}
//						SendAck( ReceievedMessage );
//				}
//				else
//				{
//					std::cout<<"Error, Message decode failed";
//				}
//
//				Receieve();
//			}
//			else
//			{
//				std::cerr<<"Error, closing connection with ID"<<m_CnnectionID<<std::endl;
//				socket_.cancel();
//				socket_.close();
//			}
//
//	}
//
//
//
//virtual	tcp::socket& socket()
//	{
//		std::cout<<"Returning Socket for connection ID: "<<m_CnnectionID<<std::endl;
//		return socket_;
//	}
//
//	bool Handle_Send( const boost::system::error_code& error, size_t bytes_transferred )
//	{
//		std::cout<<"Connection_End class"<<std::endl;
//		std::cout<<"Sent "<<bytes_transferred<<" Bytes on Socket "<<std::endl;
//		return true;
//	}
//
//
//	bool PushData( Message m )
//	{
//		return true;
//	};
//
//
//	///
//	//Receives a message and sends an Ack for that message.
//	//
//	bool SendAck( Message Msg )
//	{
//
//		Msg.m_MsgType = ACK ;
//		std::string AckMsg = Msg.Encode();
//		Send( AckMsg );
//		std::cout<<"sent an acknowledgment message"<<AckMsg<<"."<<std::endl;
//		return true;
//	};
//
//	bool HandlePull( Message m )
//	{
//		return true;
//	}
//
//};
//
//
//
//
//


#include "DataRepo.hpp"
#include "Message.hpp"
#include <boost/asio.hpp>


using boost::asio::ip::udp;


class Connection_End_Sensor_UDP
{

		Connectiontype	m_Entity;
		int				m_CnnectionID;
		DataRepo&		m_dataRepo;



public:
	udp::endpoint	remote_endpoint_;
	typedef boost::shared_ptr<Connection_End_Sensor_UDP> ConnectionEnd_Sensor_Pointer;

	//boost::asio::io_service& io_service ,
	Connection_End_Sensor_UDP( int connectionID, DataRepo& repo, udp::endpoint& ep ): m_dataRepo( repo ), remote_endpoint_( ep )
	{

		m_CnnectionID = connectionID;
		std::cout<<"Instantiating a new instance of Connection_end with ID"<< m_CnnectionID <<std::endl;
		m_Entity = Unknown;
	}

};






